package com.springboot.demo.controller;

import com.github.pagehelper.PageInfo;
import com.springboot.demo.domain.User;
import com.springboot.demo.service.UserManager;
import com.springboot.demo.util.PageUtils;
import com.springboot.demo.util.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

//使用@Controller 注解，在对应的方法上，视图解析器可以解析return 的jsp,html页面，并且跳转到相应页面
//若返回json等内容到页面，则需要在方法上加@ResponseBody注解

//@RestController注解，相当于@Controller+@ResponseBody两个注解的结合
//返回json数据不需要在方法前面加@ResponseBody注解了
// 但使用@RestController这个注解，就不能返回jsp,html页面，视图解析器无法解析jsp,html页面
@Controller
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserManager userManager;

    private static final String prefix = "springboot/user";

    /**
     * 保存
     * @param user
     * @return
     */
    @PostMapping("/save")
    @ResponseBody
    R save(User user){
        if(userManager.save(user)){
            return R.ok();
        }
        return R.error();
    }

    /**
     * 新增
     * @return
     */
    @GetMapping("/add")
    String add(){
        return prefix + "/add";
    }


    /**
     * 删除
     * @param id
     * @return
     */
    @PostMapping("/remove")
    @ResponseBody
    R remove(String id){
        if(userManager.remove(id)){
            return R.ok();
        }
        return R.error();
    }

    /**
     * 批量删除操作[假删除,将状态改为冻结]
     * @param ids
     * @return
     */
    @PostMapping("/batchRemove")
    @ResponseBody
    R batchRemove(@RequestParam("ids[]") String[] ids){
        if(userManager.batchRemove(ids)){
            return R.ok();
        }
        return R.error();
    }

    /**
     * 修改
     * @param user
     * @return
     */
    @PostMapping("/update")
    @ResponseBody
    R update(User user){
        if(userManager.updateUser(user)){
            return R.ok();
        };
        return R.error();
    }

    /**
     * 编辑
     * @param model
     * @param id
     * @return
     */
    @GetMapping("/edit/{id}")
    String edit(Model model, @PathVariable("id") String id){
        User user = userManager.getUser(id);
        model.addAttribute("user",user);
        return prefix + "/edit";
    }

    /**
     * 获取用户集合
     * @param limit
     * @param offset
     * @param nickName
     * @param statu
     * @return
     */
    @GetMapping("/getUserList")
    @ResponseBody
    PageUtils userList(@RequestParam(defaultValue = "10")Integer limit, @RequestParam(defaultValue = "0") Integer offset, String nickName, String statu){
        PageInfo<User> pageInfo = userManager.getUserList(limit,offset,nickName,statu);
        PageUtils pageUtil = new PageUtils(new Long(pageInfo.getTotal()).intValue(), pageInfo.getList());
        return pageUtil;
    }
}
